package 其他.滑动窗口最大值;
/**
 * 输入描述：
 *
 * 第一行输入一个正整数N，表示整数个数 0<N<100000。
 * 第二行输入N个整数，整数取值范围 [-100,100]。
 * 第三行输入正整数M，M代表窗口的大小，M<=100000 并<=N。
 * 输出描述：
 *
 * 窗口滑动产生所有窗口和的最大值
 */

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入正整数N：");
        int N = scanner.nextInt();
        System.out.println("请输入"+N+"个整数:");
        int[] ints = new int[N];
        for (int i = 0; i < N; i++) {
            ints[i] = scanner.nextInt();
        }
        scanner.nextLine();
        System.out.println("请输入窗口的大小");
        int M = scanner.nextInt();

        int left=0;
        int right=0;
        int max=ints[0];
        int sum =0;
        while (right<N){

            if (right<M){
                sum+=ints[right];
                right++;

                max = right==N-1?Math.max(max,sum):max; // 当right 指针 第一次走到这个窗口大小的时候，把这个窗口内的数的和赋值给这个 max

            }else {
                sum=sum+ints[right]-ints[left];
                max=Math.max(max,sum);
                left++;
                right++;
            }
        }

        System.out.println("窗口大小为"+M+"的窗口的最大值是"+max);
    }
}
